from itertools import product
from typing import Union, Dict

from flask import Flask,request
from flask import render_template
# 调用自定义模块中的函数
from reserch import reserch4letters
from bmi import countbmi
from rename import changename
from goods_list import get_product_list

# Flask:中央登记中心
app = Flask(__name__)

# 【Flask】(https://dormousehole.readthedocs.io/en/latest/quickstart.html#id10)
# 【HTMl】(https://www.w3school.com.cn/html/index.asp)
# 【jinja2】(https://palletsprojects.com/p/jinja/)

# 1. 路由：相对路径，决定了 页面资源 的路径，如果没有登记，将返回404 not found
# 1.1 url: 相对于：http://127.0.0.1：5000的相对路径
# 1.2 methods:【GET】【POST】
# 2. 视图函数：
# 2.1 函数过程决定了你操作的方法（实现的功能），例如 if elif else for while ...
# 2.2 return：返回数据内容，text文本，HTML文件（模板渲染），JSON文件等

# 【GET】
@app.route('/',methods=['GET'])
def home():
    return render_template('home.html')

@app.route('/name',methods=['GET'])
def names():
    return render_template('name.html')

@app.route('/word',methods=['GET'])
def word():
    return render_template('word.html')

@app.route('/bmi',methods=['GET'])
def bmi():
    return render_template('bmi.html')

@app.route('/rename',methods=['GET'])
def rename():
    return render_template('rename.html')


# 【POST】实现用户输入，点击提交，将数据提交到 /result
@app.route('/result_name',methods=['POST','GET'])
def result_name():
    # 接收数据：request.form[HTML-参数名称]
    # 1. 名字的全称（完整的应用）：用户输入数据--->后端接收数据--->后端处理数据--->返回到HTML页面
    # 2. 元音字母查询（第二个功能）
    # 3. 自选：购物车 或者 课程表
    py_firstname = request.form['firstname']
    py_lastname = request.form['lastname']
    py_fullname = py_firstname.title()+' '+py_lastname.title()
    return render_template('result_name.html',
                           fullname = py_fullname)
    # 在 中央登记中心，写这么多 python过程的代码 是不是有点不好玩？
    # 使用模块来写函数过程，在视图函数中调用模块实现函数方法
@app.route('/result_word',methods=['POST','GET'])
def result_word():
    py_word = request.form['word']
    py_vowels = request.form['vowels']
    py_found = reserch4letters(py_vowels,py_word)
    return render_template('result_word.html',
                           found = py_found)

@app.route('/result_bmi',methods=['POST','GET'])
def result_bmi():
    py_height = float(request.form['height'])
    py_weight = float(request.form['weight'])
    py_bmi,py_suggest = countbmi(py_weight,py_height)
    return render_template('result_bmi.html',
                           bmi=py_bmi,suggest=py_suggest)

@app.route('/result_rename',methods=['POST','GET'])
def result_rename():
    py_folder_path = (request.form['folder_path'])
    py_prefix = (request.form['prefix'])
    py_new_name_index = int(request.form['new_name_index'])
    py_report = changename(py_folder_path,py_prefix,py_new_name_index)
    return render_template('result_rename.html',
                           report=py_report)

# 购物车
#request.form.get从表单获取多个元素
# @app.route('/shopping', methods=['POST','GET'])
# def shopping():
#     product_list = [
#         # 商品1 商品名称，商品价格，商品编号...
#         # 商品模板 ： [商品名称,商品名称]
#         ["iPhone 13", 8999],
#         ["iPhone 13 pro", 9999],
#         ["iphone 13 pro max", 11999],
#         ["huawei mate 30 pro", 7999],
#         ["huawei mate 50 pro", 8899],
#     ]
#     for product in product_list:
#         total += int(request.form.get(str(product['id']))) * product['price']
# #     return render_template('shopping.html', product_list=product_list)

@app.route('/shopping', methods=['POST','GET'])
def buy(py_tips="欢迎来到易云购商城！"):
    user_shopping_cart = []  # append 可以新增列表
    product_list = get_product_list()
    py_money = 20000
    total: int = 0
    # total = int(request.form[])
    # py_total = (request.form[total])

    # if py_money < total:
    #     print("您的余额不够，请更换支付方式")
    # # 2. 如果够的话，赶紧扣钱！把商品加到购物车
    # else:
    #     py_money = py_money - total
    #     # user_shopping_cart.append(goods_list[choice])
    #     # 提示用户：本次购买成功
    #     py_tips = '购买成功！！！感谢使用易云购商城'
    return render_template('shopping.html', product_list=product_list,money=py_money,tips=py_tips)



if __name__ == '__main__':
    app.run(host='127.0.0.1',port=5000,debug=True)
